home *** CD-ROM | disk | FTP | other *** search
/ Computer Inter@ctive 17 / Computer Interactive cdrom 17 - gen 99.iso / ZDNETIT / CONTENT / OPTIVC16.ZIP / INCLUDE.ZIP / VCESTD.H < prev    next >
Encoding:
C/C++ Source or Header  |  1998-10-21  |  10.3 KB  |  277 lines

  1. /*  VCEstd.h
  2.  
  3.   vector management functions:
  4.   complex manipulations on whole arrays or vectors of data type eComplex
  5.   (extended-precision complex)
  6.  
  7.   Copyright (c) 1996-1998 by Martin Sander
  8.   All Rights Reserved.
  9. */
  10.  
  11. #ifndef __VCESTD_H
  12. #define __VCESTD_H
  13. #if !defined( __VECLIB_H )
  14. #include <VecLib.h>
  15. #endif
  16.  
  17. #ifdef __BORLANDC__   /* 80-bit IEEE numbers supported.
  18.                          The following  130 lines apply 
  19.                          only to Borland C++            */
  20.  
  21. #ifdef __cplusplus
  22. extern "C" {
  23. #endif
  24.  
  25. /*************************  Generation  **************************/
  26.  
  27. ceVector   __vf  VCE_vector( ui size );
  28. ceVector   __vf  VCE_vector0( ui size );
  29.  
  30. /***************  Addressing single vector elements ******************/
  31.  
  32. eComplex _VFAR * VCE_Pelement( ceVector X, ui n );
  33.       /* returns a pointer to the n'th element of X. For the memory model
  34.          HUGE, the pointer is normalized. */
  35. #define VCE_element( X, n )  (*VCE_Pelement( X, n ))
  36.  
  37. /*******************  Initialization **********************************/
  38.  
  39. void  __vf  VCE_equ0( ceVector X, ui size );
  40. void  __vf  VCE_equ1( ceVector X, ui size );
  41. void  __vf  VCE_equC( ceVector X, ui size, eComplex C );
  42. void  __vf  VCE_equV( ceVector Y, ceVector X, ui size );
  43. void  __vf  VCEx_equV( ceVector Y, ceVector X, ui size,
  44.                        eComplex A, eComplex B );
  45. void  __vf  VCE_ramp( ceVector X, ui size, eComplex Start, eComplex Rise );
  46.  
  47. void  __vf  VE_CtoReIm( eVector Re, eVector Im, ceVector X, ui size );
  48. void  __vf  VE_ReImtoC( ceVector Y, eVector Re, eVector Im, ui size );
  49. void  __vf  VE_CtoRe( eVector Re, ceVector X, ui size );
  50. void  __vf  VE_RetoC( ceVector Y, eVector Re, ui size );
  51. void  __vf  VE_CtoIm( eVector Im, ceVector X, ui size );
  52. void  __vf  VE_ImtoC( ceVector Y, eVector Im, ui size );
  53. void  __vf  VE_CtoPolar( eVector Mag, eVector Arg, ceVector X, ui size );
  54. void  __vf  VE_PolartoC( ceVector Y, eVector Mag, eVector Arg, ui size );
  55. void  __vf  VE_CtoNorm( eVector Norm, ceVector X, ui size );
  56. void  __vf  VE_CtoAbs( eVector Abs, ceVector X, ui size );
  57. void  __vf  VE_CtoArg( eVector Arg, ceVector X, ui size );
  58. int   __vf  VCE_abs(  eVector Y, ceVector X, ui size );
  59.  
  60. #define     VCE_real         VE_CtoRe
  61. #define     VCE_imag         VE_CtoIm
  62. #define     VCE_arg          VE_CtoArg
  63. #define     VCE_norm         VE_CtoNorm
  64. #define     VCE_polar        VE_PolartoC
  65. #define     VCE_complex      VE_ReImtoC
  66.  
  67. /****************  Data-type interconversions  ***************************/
  68.  
  69. void  __vf   V_CFtoCE( ceVector Y, cfVector X, ui size );
  70. void  __vf   V_CEtoCF( cfVector Y, ceVector X, ui size );
  71. void  __vf   V_CDtoCE( ceVector Y, cdVector X, ui size );
  72. void  __vf   V_CEtoCD( cdVector Y, ceVector X, ui size );
  73.  
  74.  
  75. /****************  Index-oriented manipulations ***********************/
  76.  
  77. void  __vf  VCE_reflect( ceVector X, ui size );
  78. void  __vf  VCE_delete( ceVector X, ui size, ui pos );
  79. void  __vf  VCE_insert( ceVector X, ui size, ui pos, eComplex C );
  80. void  __vf  VCE_rev( ceVector Y, ceVector X, ui size );
  81. #ifdef V_HUGE
  82.    void  __vf  VCE_rotate( ceVector Y, ceVector X, ui size, long pos );
  83. #else
  84.    void  __vf  VCE_rotate( ceVector Y, ceVector X, ui size, int pos );
  85. #endif
  86.  
  87. void  __vf  VCE_indpick( ceVector Y, uiVector Ind, ui sizey, ceVector X );
  88. void  __vf  VCE_indput(  ceVector Y, ceVector X, uiVector Ind, ui sizex );
  89. void  __vf  VCE_subvector( ceVector Y, ui sizey, ceVector X, int step );
  90.  
  91.  
  92. /***************** Functions of a sub-set of elements  ********************/
  93.  
  94. void  __vf  VCE_subvector_equC(  ceVector Y, ui subsiz, unsigned samp,
  95.                                  eComplex C );
  96. void  __vf  VCE_subvector_equV(  ceVector Y, ui subsiz, unsigned samp,
  97.                                  ceVector X );
  98.     /*   for arithmetic functions of subsets, see <VCEmath.h>  */
  99.  
  100.  
  101. /**************** One-Dimensional Vector Operations ***********************/
  102.  
  103. eComplex  __vf  VCE_maxReIm(     ceVector X, ui size );
  104. eComplex  __vf  VCE_minReIm(     ceVector X, ui size );
  105. eComplex  __vf  VCE_absmaxReIm(  ceVector X, ui size );
  106. eComplex  __vf  VCE_absminReIm(  ceVector X, ui size );
  107. extended  __vf  VCE_absmax(  ceVector X, ui size );
  108. extended  __vf  VCE_absmin(  ceVector X, ui size );
  109. extended  __vf  VCE_absmaxind( ui _VFAR *pos, ceVector X, ui size );
  110. extended  __vf  VCE_absminind( ui _VFAR *pos, ceVector X, ui size );
  111. eComplex  __vf  VCE_sum(     ceVector X, ui size );
  112. eComplex  __vf  VCE_prod(    ceVector X, ui size );
  113. void      __vf  VCE_runsum(  ceVector Y, ceVector X, ui size );
  114. void      __vf  VCE_runprod( ceVector Y, ceVector X, ui size );
  115. int       __vf  VCE_iselementC( ceVector Tab, ui size, eComplex C );
  116. ui        __vf  VCE_iselementV( ceVector Y, ceVector X, ui sizex,
  117.                                 ceVector Tab, ui sizetab );
  118.  
  119.  
  120. /****************** Statistical Functions and Building Blocks **********/
  121.  
  122. eComplex  __vf  VCE_mean(   ceVector X, ui size );
  123. eComplex  __vf  VCE_meanwW( ceVector X, eVector Wt, ui size );
  124.  
  125.  
  126. /*********  Fourier Transforms, Convolutions, Filtering  ****************/
  127.  
  128. void  __vf   VCEl_FFT( ceVector Y, ceVector X, ui size, int dir );
  129. void  __vf   VCEl_filter( ceVector Y, ceVector X, ceVector Flt, ui size );
  130.  
  131. void  __vf   VCEs_FFT( ceVector Y, ceVector X, ui size, int dir );
  132. void  __vf   VCEs_filter( ceVector Y, ceVector X, ceVector Flt, ui size );
  133.  
  134. #if( defined( __LARGE__ ) || defined( __COMPACT__ ) )
  135.    #define VCE_FFT       VCEl_FFT
  136.    #define VCE_filter    VCEl_filter
  137. #else
  138.    #define VCE_FFT       VCEs_FFT
  139.    #define VCE_filter    VCEs_filter
  140. #endif
  141.  
  142.  
  143. /***************************  Input and Output *****************************/
  144.  
  145. void  __vf  VCE_fprint( FILE _VFAR *stream, ceVector X, ui size,
  146.                                  unsigned nperline, unsigned linewidth );
  147. #ifndef _Windows
  148.    void  __vf  VCE_cprint( ceVector X, ui size, unsigned nperline );
  149. #endif
  150. #define VCE_print( X, sz, npl ) VCE_fprint( stdout, X, sz, npl, 80 )\
  151.             /* VCE_print is usable only for DOS and EasyWin!   */
  152. void  __vf  VCE_write( FILE _VFAR *stream, ceVector X, ui size );
  153. void  __vf  VCE_read( ceVector X, ui size, FILE _VFAR *stream );
  154. void  __vf  VCE_nwrite( FILE _VFAR *stream, unsigned n, ui size, ... );
  155. void  __vf  VCE_nread( unsigned n, ui size, FILE _VFAR *stream, ... );
  156. void  __vf  VCE_setWriteFormat( char _VFAR *FormatString );
  157.                                             /* for VCE_write and VCE_nwrite */
  158. void  __vf  VCE_setWriteSeparate( char _VFAR *SepString ); /* for VCE_write */
  159. void  __vf  VCE_setNWriteSeparate( char _VFAR *SepString ); /* for VCE_nwrite */
  160. #ifdef V_HUGE
  161.     void  __vf  VCE_store( FILE _VFAR *stream, ceVector X, ui size );
  162.     void  __vf  VCE_recall( ceVector X, ui size, FILE _VFAR *stream  );
  163. #else
  164.     #ifdef __cplusplus
  165.          void  inline VCE_store( FILE _VFAR *stream, ceVector X, ui size )
  166.          {    fwrite( X, sizeof(eComplex), size, stream ); 
  167.          }
  168.          void  inline VCE_recall( ceVector X, ui size, FILE _VFAR *stream )
  169.          {    fread(  X, sizeof(eComplex), size, stream );
  170.          }
  171.     #else
  172.         #define VCE_store( str, X, sz )  \
  173.                      fwrite( X, sizeof(eComplex), sz, str )
  174.         #define VCE_recall( X, sz, str ) \
  175.                      fread(  X, sizeof(eComplex), sz, str )
  176.     #endif
  177. #endif      /* VCE_store, VCE_recall in binary format */
  178.  
  179. #ifdef __cplusplus
  180. }    /* end of extern "C"  */
  181. #endif
  182.  
  183. #else   /* the following 130 lines apply only to compilers without
  184.            support for 80-bit IEEE numbers.  */
  185.  
  186. #define VCE_vector     VCD_vector
  187. #define VCE_vector0    VCD_vector0
  188. #define VCE_Pelement   VCD_Pelement
  189. #define VCE_element( X, n )  (*VCE_Pelement( X, n ))
  190.  
  191. #define VCE_equ0        VCD_equ0
  192. #define VCE_equ1        VCD_equ1
  193. #define VCE_equC        VCD_equC
  194. #define VCE_equV        VCD_equV
  195. #define VCEx_equV       VCDx_equV
  196. #define VCE_ramp        VCD_ramp
  197.  
  198. #define VE_CtoReIm      VD_CtoReIm
  199. #define VE_ReImtoC      VD_ReImtoC
  200. #define VE_CtoRe        VD_CtoRe
  201. #define VE_RetoC        VD_RetoC
  202. #define VE_CtoIm        VD_CtoIm
  203. #define VE_ImtoC        VD_ImtoC
  204. #define VE_CtoPolar     VD_CtoPolar
  205. #define VE_PolartoC     VD_PolartoC
  206. #define VE_CtoNorm      VD_CtoNorm
  207. #define VE_CtoAbs       VD_CtoAbs
  208. #define VE_CtoArg       VD_CtoArg
  209. #define VCE_abs         VCD_abs
  210.  
  211.  
  212. #define VCE_real        VE_CtoRe
  213. #define VCE_imag        VE_CtoIm
  214. #define VCE_arg         VE_CtoArg
  215. #define VCE_norm        VE_CtoNorm
  216. #define VCE_polar       VE_PolartoC
  217. #define VCE_complex     VE_ReImtoC
  218.  
  219.  
  220. #define V_CFtoCE        V_CFtoCD
  221. #define V_CEtoCF        V_CDtoCF
  222. #define V_CDtoCE        VCD_equV
  223. #define V_CEtoCD        VCD_equV
  224.  
  225. #define VCE_reflect     VCD_reflect
  226. #define VCE_delete      VCD_delete
  227. #define VCE_insert      VCD_insert
  228. #define VCE_rev         VCD_rev
  229. #define VCE_rotate      VCD_rotate
  230. #define VCE_indpick     VCD_indpick
  231. #define VCE_indput      VCD_indput
  232. #define VCE_subvector   VCD_subvector
  233. #define VCE_subvector_equC  VCD_subvector_equC
  234. #define VCE_subvector_equV  VCE_subvector_equV
  235.  
  236. #define VCE_maxReIm     VCD_maxReIm
  237. #define VCE_minReIm     VCD_minReIm
  238. #define VCE_absmaxReIm  VCD_absmaxReIm
  239. #define VCE_absminReIm  VCD_absminReIm
  240. #define VCE_absmax      VCD_absmax
  241. #define VCE_absmin      VCD_absmin
  242. #define VCE_absmaxind   VCD_absmaxind
  243. #define VCE_absminind   VCD_absminind
  244. #define VCE_sum         VCD_sum
  245. #define VCE_prod        VCD_prod
  246. #define VCE_runsum      VCD_runsum
  247. #define VCE_runprod     VCD_runprod
  248. #define VCE_iselementC  VCD_iselementC
  249. #define VCE_iselementV  VCD_iselementV
  250.  
  251. #define VCE_mean        VCD_mean
  252. #define VCE_meanwW      VCD_meanwW
  253.  
  254. #define VCEl_FFT        VCDl_FFT
  255. #define VCEl_filter     VCDl_filter
  256. #define VCEs_FFT        VCDs_FFT
  257. #define VCEs_filter     VCDs_filter
  258. #define VCE_FFT         VCEs_FFT
  259. #define VCE_filter      VCEs_filter
  260.  
  261. #define VCE_fprint      VCD_fprint
  262. #define VCE_print       VCD_print
  263. #define VCE_write       VCD_write
  264. #define VCE_read        VCD_read
  265. #define VCE_nwrite      VCD_nwrite
  266. #define VCE_nread       VCD_nread
  267. #define VCE_setWriteFormat      VCD_setWriteFormat
  268. #define VCE_setWriteSeparate    VCD_setWriteSeparate    
  269. #define VCE_setNWriteSeparate   VCD_setNWriteSeparate
  270. #define VCE_store       VCD_store
  271. #define VCE_recall      VCD_recall
  272.  
  273.  
  274. #endif   /* IEEE number support */
  275.  
  276. #endif /*  __VCESTD_H */
  277.